;--------------------------------
; Test file for 68000 assembler.
;
; snasm68.exe
;--------------------------------

; Algorithm start
; - $26AC [FEXDRV.X]

;<48E7> 037DCC : movem.l D1-D3/A0-A4, -(A7)          A0:00037DCC A1:0010762C A2:00087628 A3:000350E0 A4:000874C0 A5:00006750 A6:00006734 A7:0002D1A0 SR:0020 D0:000000F4 D1:FFFFFFFF D2:00000002 D3:FFFFFF00 D4:00034696 D5:00000000 D6:00000000 D7:00000005 CR:0212
;<47FA> 037DD0 : lea     ($4a,PC), A3; ($37e1c)      A0:00037DCC A1:0010762C A2:00087628 A3:000350E0 A4:000874C0 A5:00006750 A6:00006734 A7:0002D180 SR:0020 D0:000000F4 D1:FFFFFFFF D2:00000002 D3:FFFFFF00 D4:00034696 D5:00000000 D6:00000000 D7:00000005 CR:47FA70F8
;<363C> 037DD4 : move.w  #$ff, D3                    A0:00037DCC A1:0010762C A2:00087628 A3:00037E1C A4:000874C0 A5:00006750 A6:00006734 A7:0002D180 SR:0020 D0:000000F4 D1:FFFFFFFF D2:00000002 D3:FFFFFF00 D4:00034696 D5:00000000 D6:00000000 D7:00000005 CR:47FA70F8

; $26FC
;<14D8> 037E1C : move.b  (A0)+, (A2)+                A0:0008E99F A1:0010B289 A2:0008E9A0 A3:00037E1C A4:00037DEA A5:00006750 A6:00006734 A7:0002D180 SR:0020 D0:000000A8 D1:FFFFFFFF D2:00000000 D3:FFFF00FF D4:00034696 D5:00000000 D6:00000000 D7:00000005 CR:0286
;<14D8> 037E1E : move.b  (A0)+, (A2)+                A0:0008E9A0 A1:0010B289 A2:0008E9A1 A3:00037E1C A4:00037DEA A5:00006750 A6:00006734 A7:0002D180 SR:0020 D0:000000A8 D1:FFFFFFFF D2:00000000 D3:FFFF00FF D4:00034696 D5:00000000 D6:00000000 D7:00000005 CR:0286

; ===================================================================
; ===================================================================
; ===================================================================

; Purpose:
; - Slipstreaming decoding

	org $26fc-$40

start_wrapper:
	bsr start

start:
	; save THIS routine RTS (_relocatable_ code)
	move.l (a7),$1fffe0.l
	addq.l #4,a7

	; save ENTRY routine RTS (_relocatable_ code)
	move.l (a7),$1fffe4.l
	addq.l #4,a7

	; save ENTRY STACK
	move.l a7,$1fffe8.l


	; switch stacks (RAM space limited)
	movea.l #$1fffe0,a7

	; save DISK_LOAD regs
	movem.l d0-d3/a0-a3, -(a7)

; -----------------------------

	; load new file to DST
	lea code1_file_name(pc),a3
	movea.l #$1ff000,a2
	bsr load_file

	; fixed-address code
	jmp $1ff000.l


code1_file_name:
	dc.b "code1",0
	even

; =============================
; *****************************
; *****************************
; =============================

load_file:
	; save DISK routine PC
;	move.l -2(PC),$1fffec.l

	clr.w -(A7)
	pea (a3)		; file name
	dc.w $ff3d		; OS = open file
	addq.l #6,a7
	move.l d0,d1		; save file handle

	tst.l d0		; file error
	bmi load_file

; ----------------------------------

	move.w #2,-(a7)		; seek end
	clr.l -(a7)
	move.w d1,-(a7)		; file handle
	dc.w $ff42		; OS = seek size
	addq.l #8,a7
	move.l d0,d2		; file size

	tst.l d0		; file error
	bmi load_done

; ----------------------------------

	clr.w -(a7)		; seek start
	clr.l -(a7)
	move.w d1,-(a7)		; file handle
	dc.w $ff42		; OS = seek size
	addq.l #8,a7

	tst.l d0		; file error
	bmi load_done

; ----------------------------------

	move.l d2,-(a7)		; file size
	pea (a2)		; dst address
	move.w d1,-(a7)		; file handle
	dc.w $ff3f		; OS = read file
	dc.w $4fef,$000a	; lea ($a,a7), a7

	tst.l d0		; file error
	bmi load_done

; ----------------------------------

	move.w d1,-(a7)		; file handle
	dc.w $ff3e		; OS = close file
	addq.l #2,a7

; ----------------------------------

load_done:
	rts
